#!/usr/bin/python
#coding:utf-8
'''
基于回归的算法模型评估
'''

#创建数据集，其中矩阵x表示特征值，向量y表示所属类目标记值
import numpy as np 
X = np.random.random((10,5))
y = np.random.randn(10,1)

#切分数据为训练集和测试集
from sklearn.cross_validation import train_test_split 
X_train,X_test,y_train,y_test = train_test_split(X,y,random_state=0)

#利用线性回归模型对数据进行拟合
from sklearn.linear_model import LinearRegression 
lr = LinearRegression(normalize=True)
lr.fit(X_train,y_train)

#对测试集数据预测
y_pred = lr.predict(X_test)
print y_pred 
print y_test 

##############平均绝对误差（MAE）#######################
from sklearn.metrics import mean_absolute_error 
result = mean_absolute_error(y_test,y_pred)
#期望值与真实值平均相差多大
print result

##############平均方差（MSE）#######################
from sklearn.metrics import mean_squared_error
result = mean_squared_error(y_test,y_pred)
#估计值与真实值之差平方的期望值，越小越好，纪为MSE，开根为RMSE，即均方根误差
print result

##############R平方值#######################
#方程对预测值的拟合程度
from sklearn.metrics import r2_score
result=r2_score(y_test,y_pred)
print result

##############交叉验证#######################
'''
在某种意义下将原始数据(dataset)进行分组,一部分做为训练集(train set)，另一部分做为验证集(validation set or test set)。首先用训练集对分类器进行训练，再利用验证集来测试训练得到的模型(model)，以此来做为评价分类器的性能指标
'''
from sklearn.model_selection import cross_val_score
# print (cross_val_score(knn,x_train,y_train,cv=4))
print(cross_val_score(lr,X,y,cv=2))